<?php

/**
 * UserIdentity represents the data needed to identity a user.
 * It contains the authentication method that checks if the provided
 * data can identity the user.
 */
class UserIdentity extends CUserIdentity {

    private $_id;

    /**
     * Authenticates a user.
     * @return boolean whether authentication succeeds.
     */
    public function authenticate() {
        $user = User::model()->findByAttributes(array('name' => $this->username));
        if ($user === null) {
            $this->errorCode = self::ERROR_USERNAME_INVALID;
        } else {
            if ($user->password !== $user->encrypt($this->password)) {
                $this->errorCode = self::ERROR_PASSWORD_INVALID;
            } 
            else {//correct username & password
                //only allow super admin
                if ($user->isSuper == 0) {
                    $this->errorCode = self::ERROR_UNKNOWN_IDENTITY;
                } 
                else {
                    $this->_id = $user->userId;
                    if (null === $user->lastVisitDate) {
                        $lastLogin = time();
                    } else {
                        $lastLogin = strtotime($user->lastVisitDate);
                    }
                    $this->setState('lastLoginTime', $lastLogin);
                    $this->errorCode = self::ERROR_NONE;
                }
            }
        }
        return !$this->errorCode;
    }

    public function getId() {
        return $this->_id;
    }

}